﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Dln.Common.WxPayAPI;

public partial class example_ResultNotifyPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ResultNotify resultNotify = new ResultNotify(this);

        resultNotify.ProcessNotify();
    }
}

/// <summary>
/// 支付结果通知回调处理类
/// 负责接收微信支付后台发送的支付结果并对订单有效性进行验证，将验证结果反馈给微信支付后台
/// </summary>
public class ResultNotify : Notify
{
    public ResultNotify(Page page)
        : base(page)
    {
    }

    public override void ProcessNotify()
    {
        WxPayData notifyData = GetNotifyData();
        Log.Debug(this.GetType().ToString(), "Line28,code=" + "支付回调完成");
        ////检查支付结果中transaction_id是否存在
        //if (!notifyData.IsSet("transaction_id"))
        //{
        //    //若transaction_id不存在，则立即返回结果给微信支付后台
        //    WxPayData res = new WxPayData();
        //    res.SetValue("return_code", "FAIL");
        //    res.SetValue("return_msg", "支付结果中微信订单号不存在");
        //    Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml());
        //    page.Response.Write(res.ToXml());
        //    page.Response.End();
        //}

        //var transaction_id = notifyData.GetValue("transaction_id").ToString();

        ////查询订单，判断订单真实性
        //if (!QueryOrder(transaction_id))
        //{
        //    //若订单查询失败，则立即返回结果给微信支付后台
        //    WxPayData res = new WxPayData();
        //    res.SetValue("return_code", "FAIL");
        //    res.SetValue("return_msg", "订单查询失败");
        //    Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml());
        //    page.Response.Write(res.ToXml());
        //    page.Response.End();
        //}
        ////查询订单成功
        //else
        //{
        //    var orderno = notifyData.GetValue("out_trade_no").ToString();
        //    var total_fee = notifyData.GetValue("total_fee").ToString();

        //    if (!string.IsNullOrWhiteSpace(orderno))
        //    {
        //        Log.Info(this.GetType().ToString(), "orderno : " + orderno);
        //        var mos = ServiceFactory.CreateMemberOrderService();
        //        var order = mos.GetOrderByNo(orderno);

        //        if (order != null)
        //        {
        //            order.PayNo = transaction_id;
        //            order.PayMoney = Convert.ToDecimal(total_fee) / 100;
        //            order.PayState = (int)PayState.已付款;
        //            order.OrderState = (int)OrderState.未发货;
        //            order.PayTime = DateTime.Now;
        //            var result = mos.PayOrder(order, notifyData.ToJson());

        //            Log.Info(this.GetType().ToString(), "微信支付通知: " + notifyData.ToJson());
        //            Log.Info(this.GetType().ToString(), "订单支付通知: " + order.ToString());

        //            if (result.IsSuccess)
        //            {
        //                WxPayData res = new WxPayData();
        //                res.SetValue("return_code", "SUCCESS");
        //                res.SetValue("return_msg", "OK");
        //                Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml());
        //                page.Response.Write(res.ToXml());
        //                page.Response.End();
        //            }
        //            else
        //            {
        //                Log.Error(this.GetType().ToString(), "微信支付出错: " + result.Message);
        //            }
        //        }
        //    }
        //}
    }

    //查询订单
    private bool QueryOrder(string transaction_id)
    {
        WxPayData req = new WxPayData();
        req.SetValue("transaction_id", transaction_id);
        WxPayData res = WxPayApi.OrderQuery(req);
        return res.GetValue("return_code").ToString() == "SUCCESS" && res.GetValue("result_code").ToString() == "SUCCESS";
    }
}
